<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
<!-- core.qdoc -->
  <title>Core Internals | Qt 5.14</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td ><a href="index.html">Qt 5.14</a></td><td >Core Internals</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right">Qt 5.14.2 Reference Documentation</td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#objects-properties-and-events">Objects, Properties, and Events</a></li>
<li class="level1"><a href="#container-classes">Container Classes</a></li>
<li class="level1"><a href="#internationalization">Internationalization</a></li>
<li class="level1"><a href="#inter-process-communication">Inter-Process Communication</a></li>
<li class="level1"><a href="#threading">Threading</a></li>
<li class="level1"><a href="#platform-support">Platform Support</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Core Internals</h1>
<span class="subtitle"></span>
<!-- $$$topics-core.html-description -->
<div class="descr"> <a name="details"></a>
<p>Qt contains a rich set of fundamental enablers, mainly from the <a href="../qtcore/qtcore-index.html">Qt Core</a> module. Qt uses these enablers to provide higher-level UI and application development components. The following topics explain the most important enablers and show how to use them to implement specialized functionality not already provided by Qt.</p>
<a name="objects-properties-and-events"></a>
<h2 id="objects-properties-and-events">Objects, Properties, and Events</h2>
<p>The <a href="../qtcore/qobject.html">QObject</a> class forms the foundation of Qt's object model and is the parent class of many Qt classes. The object model introduces many mechanisms such as a meta-object system which allows run-time introspection, manipulation, and invocation of properties and methods in the object. It also serves as the basis for Qt's event system, which is a low-level way of communicating between <a href="../qtcore/qobject.html">QObject</a>-based objects. Another high-level form of communication is provided in Qt's signals and slots mechanism.</p>
<p>These features can also be used in combination with the State Machine Framework which provides a formally defined and predictable way of managing the states of your application. An alternative way of implementing state machines is using the <a href="../qtscxml/qtscxml-overview.html">Qt SCXML</a> add-on module to create them from State Chart XML (SCXML) files.</p>
<p>In addition, <a href="../qtcore/qobject.html">QObject</a> provides a simple timing mechanism with <a href="../qtcore/qobject.html#startTimer">QObject::startTimer</a>(). Alternatively, the <a href="../qtcore/qtimer.html">QTimer</a> class provides a high-level interface for timers.</p>
<ul>
<li><a href="../qtcore/object.html">Object Model</a></li>
<li><a href="../qtcore/metaobjects.html">The Meta-Object System</a></li>
<li><a href="../qtcore/properties.html">The Property System</a></li>
<li><a href="../qtcore/eventsandfilters.html">The Event System</a></li>
<li><a href="../qtcore/signalsandslots.html">Signals &amp; Slots</a><ul>
<li><a href="signalsandslots-syntaxes.html">Differences between String-Based and Functor-Based Connections</a></li>
</ul>
</li>
<li><a href="../qtcore/statemachine-api.html">The State Machine Framework</a></li>
<li><a href="../qtcore/timers.html">Timers</a></li>
</ul>
<a name="container-classes"></a>
<h2 id="container-classes">Container Classes</h2>
<p>A <i>container</i> is a data structure whose instances are collections of other objects. Some examples of containers are: dynamic arrays, queues, linked lists, and associative arrays. Qt provides a set of general purpose, template-based container classes for structuring data in memory.</p>
<p>See the full list of <a href="../qtcore/containers.html#the-container-classes">Container Classes</a> for more details.</p>
<a name="internationalization"></a>
<h2 id="internationalization">Internationalization</h2>
<p>Qt uses Unicode for the encoding of displayable text strings. Unicode provides support for all commonly used writing systems in the world and is ideal for cross-platform development. Applications can also be written to support any number of different languages with one code base using Qt's powerful internationalization system.</p>
<ul>
<li><a href="unicode.html">Unicode in Qt</a></li>
<li><a href="internationalization.html">Internationalization with Qt</a></li>
</ul>
<a name="inter-process-communication"></a>
<h2 id="inter-process-communication">Inter-Process Communication</h2>
<p>Qt provides several classes to support communication between processes. You can also launch and manage external processes using the <a href="../qtcore/qprocess.html">QProcess</a> class.</p>
<ul>
<li><a href="ipc.html">Inter-Process Communication in Qt</a></li>
</ul>
<a name="threading"></a>
<h2 id="threading">Threading</h2>
<p>Qt provides functionality to manage threads and parallelized code in a safe and platform-independent way.</p>
<ul>
<li><a href="thread-basics.html">Threading Basics</a></li>
<li><a href="threads.html">Thread Support in Qt</a></li>
</ul>
<a name="platform-support"></a>
<h2 id="platform-support">Platform Support</h2>
<p>Qt allows you to write platform-independent code, where the same code base can be compiled for and deployed on different platforms without any changes. In cases where you need to use platform-specific features and integrate with system libraries, Qt also provides solutions for this.</p>
<p>Qt integrates with the windowing system on the target platform using Qt Platform Abstraction (QPA). QPA is an abstraction of a windowing system which makes porting Qt to new platforms simple and quick. One such system is the Wayland protocol. Qt can be used together with Wayland as a light-weight windowing system on embedded hardware to support a multi-process graphical user interface.</p>
<p>The Qt Platform Abstraction uses Qt's plugin system. This plugin system provides APIs to extend Qt in specific areas (such as adding support for new image formats, database drivers, and so on) and also for writing your own extensible Qt applications which support third-party plugins.</p>
<ul>
<li><a href="qpa.html">Qt Platform Abstraction</a></li>
<li><a href="atomic-operations.html">Implementing Atomic Operations</a> - for new architectures</li>
<li><a href="plugins-howto.html">How to Create Qt Plugins</a></li>
<li><a href="../qtcore/qtendian.html">Endian Conversion Functions</a> - functions for handling endianness from the QtEndian header</li>
</ul>
</div>
<!-- @@@topics-core.html -->
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2020 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br/>    The documentation provided herein is licensed under the terms of the    <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation    License version 1.3</a> as published by the Free Software Foundation.<br/>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>
